package org.example.service.impl;

import org.apache.ibatis.annotations.Param;
import org.example.mapper.UsersTbMapper;
import org.example.pojo.UsersTb;
import org.example.service.api.UserServiceApi;
import org.example.util.JSONResult;
import org.example.util.JSONStats;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
public class UserService implements UserServiceApi<UsersTb> {
    //获取dao
    @Autowired
    UsersTbMapper usersTbMapper;

    //使用方法
    public List<UsersTb> queryAll(){
        List<UsersTb> usersTbs = usersTbMapper.querryAll();
        return usersTbs;
    }

    /**
     * 用户注册相关操作
     * 查询用户信息
     * 并且返回结果
     */
    public JSONResult userRegist(String username, String userPassword, String userSex, String userXh, String userPhone){

        //创建JsonResult
        JSONResult jsonResult = new JSONResult();
        //调用Dao层 返回封装结果
        int result = usersTbMapper.userRegist(username,userPassword,userSex,userXh,userPhone);

        if(result<0){
            //注册失败
            jsonResult.setStatusCode(JSONStats.REGIST_ERROR.getStatusCode());
            jsonResult.setMessage(JSONStats.REGIST_ERROR.getMessage());
            //
        }else{
            //注册成功
            jsonResult.setStatusCode(JSONStats.REGIST_SUCCESS.getStatusCode());
            jsonResult.setMessage(JSONStats.REGIST_SUCCESS.getMessage());
        }

        return jsonResult;
    }

    /**
     *
     * @param username 前端传入的用户名
     * @return 返回处理好的数据结果
     */
    @Override
    public JSONResult checkUserName(String username) {
        JSONResult jsonResult = new JSONResult();
        //调用Dao
        UsersTb usersInfo= usersTbMapper.checkUserName(username);
        //根据查询结果返回

        if(usersInfo.getUserName()!=null){
            //用户名被占用
            jsonResult.setStatusCode(JSONStats.REGIST_SPAN.getStatusCode());
            jsonResult.setMessage(JSONStats.REGIST_SPAN.getMessage());
        }else {
            //用户名没有被占用可用
            jsonResult.setStatusCode(JSONStats.REGIST_OK.getStatusCode());
            jsonResult.setMessage(JSONStats.REGIST_OK.getMessage());

        }

        return jsonResult;
    }

    /**
     *
     * @param username 用户名
     * @param userpassword 用户密码
     * @return
     */
    @Override
    public JSONResult userLogin(String username, String userpassword) {
        JSONResult jsonResult = new JSONResult();
        //获取用户信息
        UsersTb usersTb = usersTbMapper.checkUserName(username);
        //用户名判断
        if(usersTb==null){
            jsonResult.setStatusCode(JSONStats.USERNAME_NULL.getStatusCode());
            jsonResult.setMessage(JSONStats.USERNAME_NULL.getMessage());
        }else {

            if(!usersTb.getUserName().equals(username)){
                //设置用户名错误的状态码
                jsonResult.setStatusCode(JSONStats.USERNAME_ERROR.getStatusCode());
                //设置用户名错误的信息
                jsonResult.setMessage(JSONStats.USERNAME_ERROR.getMessage());

            }else if(!usersTb.getUserPassword().equals(userpassword)){//密码判断
                //设置用户密码错误的状态码
                jsonResult.setStatusCode(JSONStats.LOGIN_PASSWORD_ERROR.getStatusCode());
                //设置用户密码错误的信息
                jsonResult.setMessage(JSONStats.LOGIN_PASSWORD_ERROR.getMessage());

            }else{//登录成功
                //定义用户登录成功的状态码
                jsonResult.setStatusCode(JSONStats.SUCCESS.getStatusCode());
                //定义用户登录成功的消息
                jsonResult.setMessage(JSONStats.SUCCESS.getMessage());
                //密码重置为空
                usersTb.setUserPassword("");
                jsonResult.setData(usersTb);

            }
        }
        return jsonResult;
    }

    /**
     * 用户信息修改
     * @param userName 用户名
     * @param userphone 用户电话
     * @param userxh 用户学号
     * @param usersex 用户性别
     * @return jsonResult
     */
    @Override
    public JSONResult alterUserInfo(String userName, String userphone, String userxh, String usersex) {

        JSONResult jsonResult = new JSONResult();
        //调用dao
        int rows= usersTbMapper.alterUserInfo(userName,userphone,usersex,userxh);

        //根据影响的行数判断是否修改成功
        if(rows<=0){
            //失败
            jsonResult.setStatusCode(JSONStats.USER_ALTER_ERROR.getStatusCode());
            jsonResult.setMessage(JSONStats.USER_ALTER_ERROR.getMessage());

        }else if(rows>0){
            //修改成功
            jsonResult.setStatusCode(JSONStats.USER_ALTER_OK.getStatusCode());
            jsonResult.setMessage(JSONStats.USER_ALTER_OK.getMessage());

        }
        return jsonResult;
    }

    /**
     * 修改用密码
     * @param username 用户名
     * @param userpassword 用户密码
     * @return 处理好的json数据
     */
    @Override
    public JSONResult alterUserPwd(String username, String userpassword) {

        JSONResult jsonResult = new JSONResult();

        //调用dao
        int rows= usersTbMapper.alterUserPassword(username,userpassword);

        System.out.println(rows);
        //获取影响的行数
        if(rows>0){
            //修改成功
            jsonResult.setStatusCode(JSONStats.ALTER_USER_PWD_OK.getStatusCode());
            jsonResult.setMessage(JSONStats.ALTER_USER_PWD_OK.getMessage());
        }else{
            jsonResult.setMessage(JSONStats.ALTER_USER_PWD_ERROR.getMessage());
            jsonResult.setStatusCode(JSONStats.ALTER_USER_PWD_ERROR.getStatusCode());
        }
        //根据行数判断
        return jsonResult;
    }

    /**
     * 检查用户旧密码是否正确
     * @param username 用户名
     * @param userpassword 用户密码
     * @return
     */
    @Override
    public JSONResult checkUserPwd(String username, String userpassword) {
        JSONResult jsonResult = new JSONResult();
        UsersTb userInfo = usersTbMapper.checkUserName(username);

        //判断密码是否相等
        if(userInfo.getUserPassword().equals(userpassword)){
            //相等的情况下
            jsonResult.setMessage(JSONStats.USER_PASSWORD_OK.getMessage());
            jsonResult.setStatusCode(JSONStats.USER_PASSWORD_OK.getStatusCode());
        }else {
            //不相等的情况下
            jsonResult.setStatusCode(JSONStats.USER_PASSWORD_ERROR.getStatusCode());
            jsonResult.setMessage(JSONStats.LOGIN_PASSWORD_ERROR.getMessage());
        }
        return jsonResult;
    }

    /**
     * 通过用户名查询
     * @param username 用户名
     * @return
     */
    @Override
    public JSONResult adminQueryUserInfoByUserName(String username) {
        JSONResult jsonResult = new JSONResult();
        UsersTb userInfo = usersTbMapper.queryUserInfoByUserName(username);
        if(userInfo.getUserName()!=null){
            //成功
            jsonResult.setMessage(JSONStats.QUERY_SUCCESS.getMessage());
            jsonResult.setStatusCode(JSONStats.QUERY_SUCCESS.getStatusCode());
            jsonResult.setData(userInfo);

        }else {
            //失败
            jsonResult.setMessage(JSONStats.QUERY_ERROR.getMessage());
            jsonResult.setStatusCode(JSONStats.QUERY_ERROR.getStatusCode());
            jsonResult.setData(jsonResult);


        }
        return jsonResult;
    }

    /**
     * 通过系统管理员修改用户信息
     * @param userName 用户名
     * @param userPassword 用户密码
     * @param userSex 用户性别
     * @param userXh 用户学号
     * @param userStatus 用户身份状态 1管理员 0 普通用户
     * @param userPhone 用户电话
     * @return
     */
    @Override
    public JSONResult adminAlterUserInfo(@Param("userName") String userName,@Param("userPassword") String userPassword,@Param("userSex") String userSex,@Param("userXh") String userXh,@Param("userStatus") String userStatus,@Param("userPhone") String userPhone) {
        JSONResult jsonResult = new JSONResult();
        int rows=usersTbMapper.adminAlterUserInfo(userName,userPassword,userSex,userXh,userStatus,userPhone);

        if(rows>0){
            //成功
            jsonResult.setMessage(JSONStats.USER_ALTER_OK.getMessage());
            jsonResult.setStatusCode(JSONStats.USER_ALTER_OK.getStatusCode());

        }else {
            //失败
            jsonResult.setMessage(JSONStats.USER_ALTER_ERROR.getMessage());
            jsonResult.setStatusCode(JSONStats.USER_ALTER_ERROR.getStatusCode());

        }
        return jsonResult;
    }

    /**
     *
     * @param username 用户名
     * @param userPhone 用户电话
     * @param userStatus 用户身份状态 1管理员 0普通用户
     * @param userXh 用户学号
     * @param userSex 用户性别
     * @param userPassword 用户密码
     * @return
     */
    @Override
    public JSONResult adminAddUserInfo(String username, String userPhone, String userStatus, String userXh, String userSex, String userPassword) {
        JSONResult jsonResult = new JSONResult();


        int rows = usersTbMapper.adminAddUser(username,userPhone,userStatus,userXh,userSex,userPassword) ;
        if(rows>0){

            //添加成功
            jsonResult.setMessage(JSONStats.ADMIN_ADD_USER_SUCCESS.getMessage());
            jsonResult.setStatusCode(JSONStats.ADMIN_ADD_USER_SUCCESS.getStatusCode());
        }else {
            //添加事变
            //添加成功
            jsonResult.setMessage(JSONStats.ADMIN_ADD_USER_ERROR.getMessage());
            jsonResult.setStatusCode(JSONStats.ADMIN_ADD_USER_ERROR.getStatusCode());

        }
        return jsonResult;
    }

    /**
     * 通过用户id删除用户信息
     * @param userId 用户id
     * @return
     */
    @Override
    public JSONResult adminDeleteUserInfoByUserId(Integer userId) {

        JSONResult jsonResult = new JSONResult();
        int rows=usersTbMapper.adminDeleteUserInfoByUserId(userId);

        if(rows>0){
            jsonResult.setMessage(JSONStats.DELETE_SUCCESS.getMessage());
            jsonResult.setStatusCode(JSONStats.DELETE_SUCCESS.getStatusCode());

        }else {
            //删除失败
            jsonResult.setMessage(JSONStats.DELETE_ERROR.getMessage());
            jsonResult.setStatusCode(JSONStats.DELETE_ERROR.getStatusCode());
        }
        return jsonResult;
    }

    /**
     * 通过用户名查询id
     * @param userName 用户名
     * @return
     */
    @Override
    public JSONResult adminDeleteUserInfoByUserName(String userName) {
        JSONResult jsonResult = new JSONResult();

        //调用dao
        int rows =  usersTbMapper.adminDeleteUserInfoByUserName(userName);

        if(rows>0){
            jsonResult.setMessage(JSONStats.DELETE_SUCCESS.getMessage());
            jsonResult.setStatusCode(JSONStats.DELETE_SUCCESS.getStatusCode());

        }else {
            //删除失败
            jsonResult.setMessage(JSONStats.DELETE_ERROR.getMessage());
            jsonResult.setStatusCode(JSONStats.DELETE_ERROR.getStatusCode());
        }
        return jsonResult;

    }
}
